package mysql8学习.高级.第08章_索引的创建和设计原则;

/**
 * 创建索引
 *
 * #隐式的方式创建索引。
 * ● 在声明有主键约束、唯一性约束、外键约束的字段上，会自动的添加相关的索引
 * 在CREATE TABLE （创建表） 时创建索引
 *     CREATE TABLE dept (
 *     dept_id INT PRIMARY KEY AUTO_INCREMENT,（主键自动递增）
 *     dept_name VARCHAR (20 )
 *     );
 *     会自动创建主键索引（聚簇索引）
 *
 *     CREATE TABLE emp (
 *     emp_id INT PRIMARY KEY AUTO_INCREMENT ,（自动创建索引 主键约束）
 *     emp_name VARCHAR (20) UNIQUE,（自动创建索引 唯一性约束）
 *     dept_ id INT,
 *     CONSTRAINT emp_dept_id_fk FOREIGN KEY (dept_id) REFERENCES dept (dept_id)
 *          （自动创建索引 外键约束）
 *     );
 *
 * ● 显式的方式创建索引。
 *      CREATE TABLE dept (
 *      dept_id INT PRIMARY KEY AUTO_INCREMENT,
 *      dept_name VARCHAR (20 )
 *       INDEX 索引名字（dept_name（字段名））
 *         //创建dept_name的索引   不写索引名字  默认时字段名
 *      );
 *
 *
 * 声明有唯一性索引的字段 ， 此字段自动添加唯一性约束...
 *
 * ● 联合索引   查询必须有索引（联合索引）的第一个字段时 会用到索引
 * CREATE TABLE dept (
 * dept_id INT PRIMARY KEY AUTO_INCREMENT,
 * dept_name VARCHAR (20)
 *  INDEX 索引名字（字段名1，字段名2...）//联合索引
 * );
 *
 * ● 创建全文索引
 * FULLTEXT 全文索引可以用于全文搜索,并且只为CHAR、VARCHAR 和TEXT列创建索引。
 * 索引总是对整个列进行，不支持局部(前缀)索引。
 * CREATE TABLE test4 (
 *      id INT NOT NULL,
 *      NAME CHAR(30) NOT NULL,
 *      age INT NOT NULL,
 *      info VARCHAR (255) ,
 *      //全文索引  50的意思是 以前50个字符创建索引
 *      FULLTEXT INDEX futxt_idx_info(info(50))
 * )
 *
 * 不同于like方式的的查询:
 * SELECT * FROM 表名 WHERE content LIKE ‘%查询字符串%’ ;
 * 全文索引用 match+against 方式查询:   InnoDB  不支持
 * SELECT * FROM 表名 WHERE MATCH(title , content) AGAINST ( '查询字符串'):
 * 明显的提高查询效率。
 *
 * ● 空间索引创建中，要求空间类型的字段必须为非空。
 * 举例:创建表test5， 在空间类型为 GEOMETRY 的字段上创建空间索引，SQL语句如下:
 * CREATE TABLE test5(
 *      geo GEOMETRY NOT NULL,
 *      SPATIAL INDEX spa_ idx_ geo(geo)
 * ) ENGINE=MyISAM;
 *
 *
 *
 * 但是，如果显式创建表时创建索引的话,基本语法格式如下:
 *
 * CREATE TABLE table. name [col_name data_type]
 * [UNIQUE| FULLTEXT | SPATIAL] [INDEX | KEY] [index_name ] (col_name [length]) [ASC| DESC ]
 *
 * ●UNIQUE、 FULLTEXT和SPATIAL为可选参数，分别表示   唯一索引 全文索引 空间索引
 * ●INDEX与KEY为同义词,两者的作用相同，用来指定创建索引;
 * ●index_name指定索引的名称，为可选参数，如果不指定，那么MySQL默认col_name为索引名;
 * ●col_name 为需要创建索引的字段列,该列必须从数据表中定义的多个列中选择;
 * ●length为可选参数，表示索引的长度，只有字符串类型的字段才能指定索引长度;
 * ●ASC或DESC指定升序或者降序的索引值存储。
 *
 *
 *
 * 注意点
 * 1.使用全文索引前，搞清楚版本支持情况;
 * 2.全文索引比like+%快 N 倍，但是可能存在精度问题;
 * 3.如果需要全文索引的是大量数据，建议先添加数据，再创建索引。
 *
 *
 */
public class B1_创建各种索引 {
}
